import { LoopFunc } from "../../Types";
import Matrix from "../../../Matrix/Matrix";
import { GetSurroundingWallCount } from "./GetSurroundingWallCount";
import { TILE } from "../../enum";

/** 去除地图的尖锐边角 */
export const SmoothMap: LoopFunc = function (map, MapGenerator) {
    // 注意，这份地图必须是创建出来的，不能直接修改原来的 map
    const a = map.$map((_, x, y) => {
        // 处理边缘
        if (
            x === 0 ||
            y === 0 ||
            x === MapGenerator.width - 1 ||
            y === MapGenerator.height - 1
        ) {
            return TILE.Wall;
        }
        // ! 因为刚好是四个才能够数学地形成细胞地图，所以可以是四个方向都是墙的白点
        return GetSurroundingWallCount(x, y, map) > MapGenerator.smoothRate
            ? TILE.Wall
            : TILE.Void;
    });
    return new Matrix(a);
};
